package service.impl;

import service.ResearchOutputsService;
import entity.ResearchOutputs;
import mapper.ResearchOutputsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.sql.Date;

@Service
public class ResearchOutputsImpl implements ResearchOutputsService {
    @Autowired private ResearchOutputsMapper mapper;
    public ResearchOutputs getById(Integer id) { return mapper.selectById(id); }
    public List<ResearchOutputs> getAll() { return mapper.selectAll(); }
    public List<ResearchOutputs> getByStudentId(Integer sid) { return mapper.selectByStudentId(sid); }
    public int create(ResearchOutputs o) {
        // 验证和转换 outputType
        String outputType = validateAndConvertOutputType(o.getOutputType());
        o.setOutputType(outputType);

        // 处理 publicationDate
        if (o.getPublicationDate() == null) {
            // 如果没有提供日期，使用当前日期作为默认值
            o.setPublicationDate(new Date(System.currentTimeMillis()));
        }

        // 处理 contributionType
        if ("论文".equals(outputType)) {
            // 论文必须有 contributionType（对应等级1-6）
            if (o.getContributionType() == null || o.getContributionType().trim().isEmpty()) {
                // 你可以抛异常或默认赋值，比如默认6
                o.setContributionType("普通期刊");
            }
        } else {
            // 非论文贡献类型置为空字符串，避免null报错
            o.setContributionType("");
        }

        // 自动计算 raw_score
        o.setRawScore(calculateRawScore(o));

        return mapper.insert(o);
    }

    public int update(ResearchOutputs o) {
        // 验证和转换 outputType
        String outputType = validateAndConvertOutputType(o.getOutputType());
        o.setOutputType(outputType);

        // 处理 publicationDate
        if (o.getPublicationDate() == null) {
            // 如果没有提供日期，使用当前日期作为默认值
            o.setPublicationDate(new Date(System.currentTimeMillis()));
        }

        if ("论文".equals(outputType)) {
            if (o.getContributionType() == null || o.getContributionType().trim().isEmpty()) {
                o.setContributionType("普通期刊");
            }
        } else {
            o.setContributionType("");
        }

        // 自动计算 raw_score
        o.setRawScore(calculateRawScore(o));

        return mapper.update(o);
    }

    public int delete(Integer id) {
        return mapper.delete(id);
    }

    /**
     * 验证和转换 outputType，确保符合数据库 ENUM 要求
     */
    private String validateAndConvertOutputType(String outputType) {
        if (outputType == null || outputType.trim().isEmpty()) {
            return "论文"; // 默认值
        }

        // 根据前端发送的值，转换为可能的 ENUM 值
        switch (outputType.trim()) {
            case "论文":
                return "论文";
            case "发明专利":
                return "发明专利"; // 保持原值
            case "实用新型":
                return "实用新型"; // 保持原值
            case "软件著作权":
                return "软件著作权";
            default:
                return "论文"; // 默认值
        }
    }

    /**
     * 根据成果类型和贡献类型计算基础分
     */
    private Float calculateRawScore(ResearchOutputs output) {
        String outputType = output.getOutputType();
        String contributionType = output.getContributionType();

        if ("论文".equals(outputType)) {
            if (contributionType != null && !contributionType.trim().isEmpty()) {
                switch (contributionType.trim()) {
                    case "CCF A类": return 30.0f;
                    case "CCF B类": return 25.0f;
                    case "CCF C类": return 20.0f;
                    case "EI": return 15.0f;
                    case "核心期刊": return 10.0f;
                    case "普通期刊": return 5.0f;
                    default: return 0.0f;
                }
            }
        } else if ("发明专利".equals(outputType)) {
            if (contributionType != null && !contributionType.trim().isEmpty()) {
                if ("有证书".equals(contributionType) || "1".equals(contributionType)) {
                    return 5.0f;
                } else if ("实审阶段".equals(contributionType) || "2".equals(contributionType)) {
                    return 3.0f;
                }
            }
            return 5.0f; // 默认发明专利分数
        } else if ("实用新型".equals(outputType)) {
            return 2.0f;
        } else if ("软件著作权".equals(outputType)) {
            return 1.0f;
        }

        return 0.0f; // 默认分数
    }
}